/*!
 * \file WtHftStraFact.h
 * \project WonderTrader
 *
 * \author Wesley
 * \date 2020/03/30
 * 
 * \brief WonderTrader HFT高频策略工厂头文件
 * 
 * \details 该文件定义了WtHftStraFact类，实现HFT高频策略工厂接口，负责：
 *          - HFT高频策略的创建和销毁
 *          - 策略名称枚举和管理
 *          - 工厂名称标识
 *          - 高频策略实例生命周期管理
 *          
 *          支持的策略类型：
 *          - HftDemo示例策略：展示HFT策略基本框架
 *          - 其他自定义HFT高频策略
 *          
 *          高频交易特性：
 *          - 毫秒级响应速度
 *          - 实时订单管理
 *          - 低延迟数据处理
 *          - 精确的市场微观结构分析
 *          
 *          作为高频交易系统的核心组件，支持策略的动态加载和管理
 */

#pragma once
#include "../Includes/HftStrategyDefs.h"

USING_NS_WTP;

/*!
 * \class WtHftStraFact
 * \brief WonderTrader HFT高频策略工厂
 * 
 * \details 该类实现了IHftStrategyFact接口，提供HFT高频策略的工厂管理功能：
 *          
 *          核心功能：
 *          - 策略创建：根据策略名称和ID创建具体高频策略实例
 *          - 策略销毁：安全释放策略实例资源
 *          - 策略枚举：遍历工厂支持的所有高频策略类型
 *          - 工厂标识：提供唯一的工厂名称标识
 *          
 *          设计模式：
 *          - 工厂模式：封装高频策略创建逻辑
 *          - 插件模式：支持动态加载和扩展
 *          - RAII模式：自动管理策略生命周期
 *          
 *          高频交易特性：
 *          - 超低延迟：毫秒级策略实例化
 *          - 内存优化：高效的对象池管理
 *          - 并发安全：线程安全的策略管理
 *          - 实时性能：支持实时策略热插拔
 * 
 * \note 该工厂类专门用于HFT高频策略的统一管理和创建
 * \see IHftStrategyFact, HftStrategy, WtHftStraDemo
 */
class WtHftStraFact : public IHftStrategyFact
{
public:
	/*!
	 * \brief 构造函数
	 */
	WtHftStraFact();
	
	/*!
	 * \brief 析构函数
	 */
	virtual ~WtHftStraFact();

public:
	/*!
	 * \brief 获取工厂名称
	 * \return 工厂名称字符串
	 * 
	 * \details 返回该工厂的唯一标识名称，用于区分不同的高频策略工厂
	 */
	virtual const char* getName() override;

	/*!
	 * \brief 枚举工厂支持的高频策略
	 * \param cb 枚举回调函数，用于接收策略名称
	 * 
	 * \details 遍历工厂支持的所有高频策略类型，通过回调函数返回策略名称：
	 *          - 回调函数格式：void callback(const char* strategyName)
	 *          - 可用于高频策略列表展示和动态配置
	 *          - 支持实时策略发现和管理
	 */
	virtual void enumStrategy(FuncEnumHftStrategyCallback cb) override;

	/*!
	 * \brief 创建高频策略实例
	 * \param name 策略名称（如"HftDemo"）
	 * \param id 策略实例ID，用于区分同一策略的不同实例
	 * \return 创建的高频策略实例指针，失败返回nullptr
	 * 
	 * \details 根据指定的策略名称创建对应的高频策略实例：
	 *          - 支持的策略名称通过enumStrategy方法获取
	 *          - 每个策略实例具有唯一的ID标识
	 *          - 创建失败时返回nullptr，调用者需要检查返回值
	 *          - 高频策略需要特殊的内存和性能优化
	 */
	virtual HftStrategy* createStrategy(const char* name, const char* id) override;

	/*!
	 * \brief 删除高频策略实例
	 * \param stra 要删除的策略实例指针
	 * \return 删除成功返回true，失败返回false
	 * 
	 * \details 安全删除高频策略实例并释放相关资源：
	 *          - 检查策略指针有效性
	 *          - 停止策略运行状态
	 *          - 清理订单和持仓状态
	 *          - 释放内存和网络资源
	 *          - 防止重复删除导致的系统错误
	 */
	virtual bool deleteStrategy(HftStrategy* stra) override;
};

